﻿// Expedition POJ - 2431.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-2431

/*
一群奶牛抢了一辆卡车，冒险前往丛林深处探险。由于牛的驾驶技术很差，它们不幸撞上了一块石头，刺破了卡车的油箱。
现在，卡车每行驶一个单位的距离，就会泄漏一个单位的燃料。

为了修好卡车，奶牛们需要沿着一条蜿蜒曲折的长路前往最近的小镇（距离不超过 100 万单位）。
在这条路上，从小镇到卡车当前位置之间有 N 个（1 <= N <= 10,000 个）加油站，奶牛可以在这些加油站停下来获取额外的燃料（每个加油站 1...100 个单位）。

丛林对人类来说是个危险的地方，对奶牛来说尤其危险。因此，奶牛希望在前往城镇的途中尽可能减少加油站的次数。
幸运的是，它们卡车上的油箱容量非常大，可以容纳的油量实际上没有任何限制。
目前，卡车距离小镇还有 L 个单位的路程，并有 P 个单位的燃料（1 <= P <= 1,000,000）。

请确定到达小镇所需的最少停车次数，或者奶牛是否根本无法到达小镇。
输入
* 第 1 行： 一个整数 N

* 第 2...N+1 行：每行包含两个空格分隔的整数，描述一个加油站：第一个整数是小镇到加油站的距离；第二个整数是加油站的可用燃料量。

* 第 N+2 行：两个空格分隔的整数 L 和 P
输出
* 第 1 行： 一个整数，给出到达城镇所需的最少加油站数量。如果不可能到达城镇，则输出-1。
* 

4
4 4
5 2
11 5
15 10
25 10

2



输入细节：

卡车距离城镇 25 个单位；卡车有 10 个单位的燃料。
沿路有 4 个加油站，距离城镇分别为 4、5、11 和 15（因此这些加油站最初距离卡车分别为 21、20、14 和 10）。
这些加油站最多可分别供应 4、2、5 和 10 单位的燃料。

输出详情：
行驶 10 个单位，停下来再获取 10 个单位的燃料，再行驶 4 个单位，停下来再获取 5 个单位的燃料，然后行驶到城镇。

*/

int l, p,n;
const int N = 10010;
 
struct STATION {
	int dis, gas;
}stations[N];

void solve() {
	priority_queue<int, vector<int> > q;
	int curr = p; int ans = 0;
	for (int i = 1; i <= n; i++) {
		if (stations[i].dis > curr) {
			while (!q.empty() && stations[i].dis > curr) {
				curr += q.top(); q.pop();
				ans++;
			}
			if (stations[i].dis > curr) {
				cout << -1 << endl; return;
			}
		}
		q.push(stations[i].gas);
	}

	while (!q.empty() && l > curr) {
		curr += q.top(); q.pop();
		ans++;
	}
	if ( l > curr) {
		cout << -1 << endl; return;
	}
	else {
		cout << ans << endl;
	}
}

bool cmp(const struct STATION& a, struct STATION& b) {
	return a.dis < b.dis;
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> stations[i].dis >> stations[i].gas;
	}
	cin >> l >> p;

	for (int i = 1; i <= n; i++) {
		stations[i].dis = l - stations[i].dis;
	}
	sort(stations+1, stations+1+n,cmp);

	solve();

	return 0;
}

